"""
封装购物车模块使用的一些工具
"""
from django_redis import get_redis_connection
from meiduo_mall.utils.cookiesecret import CookieSecret

# TODO: 合并购物车
def merge_cart_cookie_to_redis(request, response):
    """
    功能：把cookie购物车合并到redis中
    1、Redis数据库中的购物车数据保留。
    2、如果cookie中的购物车数据在Redis数据库中已存在，将cookie购物车数据覆盖Redis购物车数据。
    3、如果cookie中的购物车数据在Redis数据库中不存在，将cookie购物车数据新增到Redis。
    :param request: 请求对象
    :param response: 响应对象
    :return: 返回响应对象
    """

    # 1、获取Cookie购物字典数据
    cart_str = request.COOKIES.get('carts')
    if cart_str:
        cart_dict = CookieSecret.loads(cart_str)
    else:
        cart_dict = {}

    # cart_dict = {11: {'count': 5, 'selected': True}}
    # 2、把Cookie字典购物车数据写入redis
    user = request.user
    conn = get_redis_connection('carts')
    sku_ids = cart_dict.keys()
    for sku_id in sku_ids:
        # sku_id是每一个在cookie购物车字典中的sku商品id
        count = cart_dict[sku_id]['count']
        # TODO: 以覆盖形式写入redis哈希对象中
        conn.hset('carts_%s'%user.id, sku_id, count)
        # TODO: 以cookie中的选中状态为准，把sku_id加入集合选中或剔除集合取消选中
        selected = cart_dict[sku_id]['selected']
        if selected:
            conn.sadd('selected_%s'%user.id, sku_id)
        else:
            conn.srem('selected_%s' % user.id, sku_id)

    # 3、登陆之后删除原有cookie中的购物车数据
    response.delete_cookie('carts')
    return response